/**
 * 会员信息服务类
 * 业务层级：业务逻辑层
 * 功能说明：提供会员信息相关的业务逻辑处理，包括会员信息查询、格式化和验证
 * 架构关系：遵循四层架构设计，调用DAO层获取数据，为表示层提供业务服务
 */
#ifndef MEMBERSERVICE_H
#define MEMBERSERVICE_H

#include "../dao/memberdao.h"
#include "../database/database.h"
#include <QString>
#include <QMap>
#include <QVariant>
#include <QVector>

class MemberService
{
public:
    explicit MemberService(Database *db);
    ~MemberService();

    // 获取格式化的会员信息
    QMap<QString, QVariant> getFormattedMemberInfo(int memberId);

    // 获取所有会员列表（用于界面展示）
    QVector<QMap<QString, QVariant>> getAllMembersForDisplay();

    // 获取会员等级历史记录
    QVector<QMap<QString, QVariant>> getMemberLevelHistory(int memberId);

    // 格式化会员等级名称
    QString formatMemberLevel(int levelId, const QString &levelName);

    // 格式化金额显示
    QString formatAmount(double amount);

    // 格式化日期时间显示
    QString formatDateTime(const QVariant &dateTime);

    // 验证会员ID是否有效
    bool isValidMemberId(int memberId);

    // 添加新会员
    bool addMember(const QString &name, const QString &phone);

    // 会员充值相关方法
    // 执行会员充值业务逻辑
    bool processMemberRecharge(int memberId, double amount, const QString &remark = "");
    
    // 验证充值参数
    bool validateRechargeParams(int memberId, double amount);
    
    // 获取充值后的等级预测信息
    QMap<QString, QVariant> predictLevelAfterRecharge(int memberId, double amount);
    
    // 格式化充值结果信息
    QString formatRechargeResult(int memberId, double amount, bool levelChanged, 
                               const QString &oldLevel, const QString &newLevel);

private:
    MemberDAO *m_memberDAO;
    Database *m_db;

    // 私有辅助方法
    QString getLevelDisplayName(int levelId);
    QString getChangeReasonText(const QString &reason);
};

#endif // MEMBERSERVICE_H
